/*
 * Copyright (C), 2002-2013, 苏宁易购电子商务有限公司
 * FileName: BaseController.java
 * Author:
 * Date:     2013-7-18 上午10:07:34
 * Description: //模块目的、功能描述      
 * History: //修改记录
 * <author>      <time>      <version>    <desc>
 * 修改人姓名             修改时间            版本号                  描述
 */
package com.roy.portal.common.util;

import java.sql.Time;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;

/**
 * 
 * 日期转换<br>
 * 日期转换工具类
 * 
 * @author
 * @see
 * @since
 */
public final class DateUtil {

    /**
     * 日志
     */
    private static Logger logger = LoggerFactory.getLogger(DateUtil.class);

    /**
     * 
     * 功能描述: <br>
     * 根据指定格式对日期进行格式化
     * 
     * @param date
     * @param format
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public static String parseDate(Date date, String format) {
        SimpleDateFormat dateformat = new SimpleDateFormat(format);
        return dateformat.format(date);
    }

    /**
     * 
     * 功能描述: <br>
     * 获得当前时间
     *
     * @return
     * @see
     * @since
     */
    public static java.sql.Date getCurDate() {
        return getDate(getCurTime());
    }

    /**
     * 
     * 功能描述: <br>
     * 获得当前时间
     *
     * @return
     * @see
     * @since
     */
    public static Timestamp getCurTime() {
        return new Timestamp(Calendar.getInstance().getTime().getTime());
    }

    public static String getCurYYYY_MM_DD() {
        DateFormat YYYY_MM_DD = new SimpleDateFormat(DateUtilCommonConstants.DateConstant.DATEFORMATE_YYYY_MM_DD);
        return YYYY_MM_DD.format(getCurTime());
    }

    public static String getCurHHMMSS() {
        DateFormat HHMMSS = new SimpleDateFormat(DateUtilCommonConstants.DateConstant.DATEFORMATE_HHMMSS);
        return HHMMSS.format(getCurTime());
    }

    public static String getFormatCurDate() {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date curdate = getCurDate();
        return formatter.format(curdate);
    }

    /**
     * 获取当前日期 yyyy-MM-dd
     * 
     * @return
     */
    public static String getCurrentDateString() {
        return formateDateStr(new Date());
    }

    /**
     * 获取明天日期 yyyy-MM-dd
     * 
     * @return
     */
    public static String getTomorrowDateString() {
        return getDateStringDelay(1);
    }

    /**
     * 获取距离今天 delay 天的日期 yyyy-MM-dd
     * 
     * @param delay
     * @return
     */
    public static String getDateStringDelay(int delay) {
        return formateDateStr(DateUtil.addDate(new Date(), delay));
    }

    /**
     * 
     * 功能描述: <br>
     * 〈功能详细描述〉
     *
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public static String getTime() {
        Timestamp time = new Timestamp(Calendar.getInstance().getTime().getTime());
        return time.toString();
    }

    /**
     * 得到当前日期
     * 
     * @param type :0日期中间横线;1：有横线
     * @return
     */
    public static String getDate(int type) {
        Calendar now = Calendar.getInstance();

        int year = now.get(Calendar.YEAR);

        int month = now.get(Calendar.MONTH) + 1;

        int day = now.get(Calendar.DAY_OF_MONTH);

        String sMonth = String.valueOf(month);

        if (sMonth.length() == DateUtilCommonConstants.NumeralConstant.ONE) {
            sMonth = DateUtilCommonConstants.StringConstant.ZERO + sMonth;
        }

        String sDay = String.valueOf(day);
        if (sDay.length() == DateUtilCommonConstants.NumeralConstant.ONE) {
            sDay = DateUtilCommonConstants.StringConstant.ZERO + sDay;
        }

        String tDate = String.valueOf(year) + "-" + sMonth + "-" + sDay;
        if (type == DateUtilCommonConstants.NumeralConstant.ZERO) {
            tDate = String.valueOf(year) + sMonth + sDay;
        }

        return tDate;
    }

    /**
     * 把yyyy-MM-dd格式的字符串转换成java.util.Date
     * 
     * @param dateStr
     * @return
     */
    public static java.util.Date getDateOfStr(String dateStr) {
        DateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd");
        java.util.Date da = null;
        try {
            da = df.parse(dateStr);
        } catch (Exception e) {
            logger.debug("转换异常" + e);
        }
        return da;
        /*
         * Date date = Date.valueOf(dateStr); return new Timestamp(date.getTime());
         */
    }

    /**
     * 把yyyyMMdd格式的字符串转换成java.util.Date
     * 
     * @param dateStr
     * @return
     */
    public static Date getDateOfShortStr(String dateStr) {
        Date da = null;
        try {
            DateFormat YYYYMMDD_FORMAT = new SimpleDateFormat(
                    DateUtilCommonConstants.DateConstant.DATEFORMATE_YYYYMMDD);
            da = new Date(YYYYMMDD_FORMAT.parse(dateStr).getTime());
        } catch (Exception e) {
            logger.debug("转换异常：" + e);
        }
        return da;
    }

    /**
     * 把日期转换成 yyyyMMdd格式的字符串
     * 
     * @param date
     * @return
     */
    public static String getShortStrDate(java.util.Date date) {
        DateFormat YYYYMMDD_FORMAT = new SimpleDateFormat(DateUtilCommonConstants.DateConstant.DATEFORMATE_YYYYMMDD);
        return YYYYMMDD_FORMAT.format(date);
    }

    /**
     * 把日期转换成 yyyyMMddHHmmss格式的字符串
     * 
     * @param date
     * @return
     */
    public static String getShortStrDateTime(java.util.Date date) {
        DateFormat YYYYMMDDHHMMSS_FORMAT = new SimpleDateFormat(
                DateUtilCommonConstants.DateConstant.DATEFORMATE_YYYYMMDDHHMMSS);
        return YYYYMMDDHHMMSS_FORMAT.format(date);
    }

    /**
     * 把yyyyMMdd格式字符串转换成 java.sql.Date
     * 
     * @param dateStr
     * @return
     */
    public static java.sql.Date getSqlDateByShortStr(String dateStr) {
        java.sql.Date da = null;
        try {
            DateFormat YYYYMMDD_FORMAT = new SimpleDateFormat(
                    DateUtilCommonConstants.DateConstant.DATEFORMATE_YYYYMMDD);
            da = new java.sql.Date(YYYYMMDD_FORMAT.parse(dateStr).getTime());
        } catch (Exception e) {
            logger.debug("转换异常：" + e);
        }
        return da;
    }

    /**
     * 把yyyyMMddHHmmss格式字符串转换成 java.sql.Date
     * 
     * @param dateStr
     * @return
     */
    public static java.sql.Date getSqlDateTimeByShortStr(String dateStr) {
        java.sql.Date da = null;
        try {
            DateFormat YYYYMMDDHHMMSS_FORMAT = new SimpleDateFormat(
                    DateUtilCommonConstants.DateConstant.DATEFORMATE_YYYYMMDDHHMMSS);
            da = new java.sql.Date(YYYYMMDDHHMMSS_FORMAT.parse(dateStr).getTime());
        } catch (Exception e) {
            logger.debug("转换异常：" + e);
        }
        return da;
    }

    /**
     * 把yyyy-MM-dd格式的字符串转换成Timestamp
     * 
     * @param dateStr
     * @return Timestamp
     */
    @SuppressWarnings("finally")
    public static Timestamp getTimeOfDateStr(String dateStr) {
        DateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd");
        java.sql.Timestamp time = null;
        try {
            java.util.Date da = df.parse(dateStr);
            time = new java.sql.Timestamp(da.getTime());
        } catch (Exception e) {
            logger.debug("转换异常：" + e);
        } finally {
            return time;
        }
    }

    /**
     * 把yyyy-MM-dd格式的字符串转换成Timestamp，且该时间是该天的最后时间
     * 
     * @param dateStr
     * @return Timestamp
     */
    @SuppressWarnings("finally")
    public static Timestamp getTimeEndOfDateStr(String dateStr) {
        DateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd");
        java.sql.Timestamp time = null;
        try {
            java.util.Date da = df.parse(dateStr);
            time = new java.sql.Timestamp(da.getTime()
                    + DateUtilCommonConstants.NumeralConstant.TWENTY_FOUR
                            * DateUtilCommonConstants.NumeralConstant.SIXTY
                            * DateUtilCommonConstants.NumeralConstant.SIXTY
                            * DateUtilCommonConstants.NumeralConstant.ONE_THOUSAND
                    - DateUtilCommonConstants.NumeralConstant.ONE);
        } catch (Exception e) {
            logger.debug("转换异常：" + e);
        } finally {
            return time;
        }
        /*
         * Date date = Date.valueOf(dateStr); date.setTime(date.getTime() + 24 * 60 * 60 * 1000 - 1); return new
         * Timestamp(date.getTime());
         */
    }

    /**
     * 把yyyy-MM-dd格式的字符串转换成Timestamp，且该时间是该天的开始时间
     * 
     * @param dateStr
     * @return Timestamp
     */
    @SuppressWarnings("finally")
    public static Timestamp getTimeBeginOfDateStr(String dateStr) {
        DateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd");
        java.sql.Timestamp time = null;
        try {
            java.util.Date da = df.parse(dateStr);
            time = new java.sql.Timestamp(da.getTime());
        } catch (Exception e) {
            logger.debug("转换异常：" + e);
        } finally {
            return time;
        }
        /*
         * Date date = Date.valueOf(dateStr); date.setTime(date.getTime() + 24 * 60 * 60 * 1000 - 1); return new
         * Timestamp(date.getTime());
         */
    }

    /**
     * 把yyyy-MM-dd HH:mm:ss.S格式的字符串转换成Timestamp
     * 
     * @param timeStr
     * @return Timestamp
     */
    @SuppressWarnings("finally")
    public static Timestamp getTimeOfTimeStr(String timeStr) {
        DateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
        java.sql.Timestamp time = null;
        try {
            java.util.Date da = df.parse(timeStr);
            time = new java.sql.Timestamp(da.getTime());
        } catch (Exception e) {
            logger.debug("转换异常：" + e);
        } finally {
            return time;
        }

        /*
         * Timestamp time = Timestamp.valueOf(timeStr); return new Timestamp(time.getTime());
         */
    }

    /**
     * 把yyyy-MM-dd HH:mm:ss.S格式的字符串转换成Date
     * 
     * @param timeStr
     * @return Timestamp
     */
    @SuppressWarnings("finally")
    public static Date getDateOfTimeStr(String timeStr) {
        DateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        java.util.Date da = null;
        try {
            da = df.parse(timeStr);

        } catch (Exception e) {
            logger.debug("转换异常：" + e);
        } finally {
            return da;
        }

        /*
         * Timestamp time = Timestamp.valueOf(timeStr); return new Timestamp(time.getTime());
         */
    }

    /**
     * 把pattern格式的字符串转换成Timestamp
     * 
     * @param timeStr
     * @return Timestamp
     */
    @SuppressWarnings("finally")
    public static Timestamp getTimeOfTimeStr(String timeStr, String pattern) {
        DateFormat df = new java.text.SimpleDateFormat(pattern);
        java.sql.Timestamp time = null;
        try {
            java.util.Date da = df.parse(timeStr);
            time = new java.sql.Timestamp(da.getTime());
        } catch (Exception e) {
            logger.debug("转换异常：" + e);
        } finally {
            return time;
        }
    }

    /**
     * 根据Timestamp获得日期
     * 
     * @param time
     * @return java.sql.Date
     */
    public static java.sql.Date getDate(Timestamp time) {
        return (new java.sql.Date(time.getTime()));
    }

    /**
     * 获得对应时间time的相应field的值。 如获得当前时间的分钟，则调用方式如下 getTimeFieldStr(getCurTime(), Calendar.MINUTE)
     * 
     * @param time
     * @param field
     * @return String
     */
    public static String getTimeFieldStr(Timestamp time, int field) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new java.util.Date(time.getTime()));
        int fieldValue = calendar.get(field);
        if (field == Calendar.MONTH)
            fieldValue++;
        return String.valueOf(fieldValue);
    }

    /**
     * 获得时间time对应的中文日期的字符串
     * 
     * @param time
     * @return String -- 如 2003年5月12日
     */
    public static String getDateCn(Timestamp time) {
        if (time == null)
            return null;
        String dateCn = getTimeFieldStr(time, Calendar.YEAR) + "年" + getTimeFieldStr(time, Calendar.MONTH) + "月"
                + getTimeFieldStr(time, Calendar.DATE) + "日";
        return dateCn;
    }

    /**
     * 获得时间time对应的中文日期的字符串
     * 
     * @param time
     * @return String -- 如 2003-5-12
     */
    public static String getDateString(Timestamp time, String v) {
        String dateCn = getTimeFieldStr(time, Calendar.YEAR) + v + getTimeFieldStr(time, Calendar.MONTH) + v
                + getTimeFieldStr(time, Calendar.DATE);
        return dateCn;
    }

    /**
     * 获得日期dateStr是星期几，日期格式是“yyyy-MM-dd”
     * 
     * @param dateStr
     * @return String -- 如 星期日
     */
    public static String getDayOfWeekCn(String dateStr) {
        Calendar cal = Calendar.getInstance();
        String weekCn = null;
        Timestamp time = getTimeOfDateStr(dateStr);
        if (time != null) {
            cal.setTime(time);
            int day = cal.get(Calendar.DAY_OF_WEEK);
            switch (day) {
                case DateUtilCommonConstants.NumeralConstant.ONE:
                    weekCn = "星期日";
                    break;
                case DateUtilCommonConstants.NumeralConstant.TWO:
                    weekCn = "星期一";
                    break;
                case DateUtilCommonConstants.NumeralConstant.THREE:
                    weekCn = "星期二";
                    break;
                case DateUtilCommonConstants.NumeralConstant.FOUR:
                    weekCn = "星期三";
                    break;
                case DateUtilCommonConstants.NumeralConstant.FIVE:
                    weekCn = "星期四";
                    break;
                case DateUtilCommonConstants.NumeralConstant.SIX:
                    weekCn = "星期五";
                    break;
                case DateUtilCommonConstants.NumeralConstant.SEVEN:
                    weekCn = "星期六";
                    break;
                default:
                    weekCn = "";
            }
        }
        return weekCn;
    }

    /**
     * 将 Timestamp 对应的日期以 "yyyy-MM-dd" 格式返回一个字符串
     * 
     * @param stamp
     * @return
     */
    public static String formatDate(Timestamp stamp) {
        if (stamp == null)
            return "";
        return new java.sql.Date(stamp.getTime()).toString();
    }

    /**
     * 返回前天，昨天，明天，后天等
     * 
     * @param diffdate 于今天相差的天数
     * @return
     */
    public static String getCustomDate(int diffdate) {
        String customDate = "";
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date curdate = getCurDate();
        long myTime = curdate.getTime() + DateUtilCommonConstants.NumeralConstant.ONE_THOUSAND
                * DateUtilCommonConstants.NumeralConstant.THREE_THOUSAND_SIX_HUNDRED
                * DateUtilCommonConstants.NumeralConstant.TWENTY_FOUR * diffdate;
        curdate.setTime(myTime);
        customDate = formatter.format(curdate);
        return customDate;
    }

    public static String getFormatDate(java.util.Date date) {
        String customDate = "";
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        customDate = formatter.format(date);
        return customDate;
    }

    /**
     * 停止使用
     * 
     * @param diffdate 于今天相差的天数
     * @return
     */
    @Deprecated
    public static String getCustomExDate(String timeStamp, int diffdate) {
        String customDate = "";
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Timestamp temp = getTimeOfTimeStr(timeStamp);
        long myTime = temp.getTime() + DateUtilCommonConstants.NumeralConstant.ONE_THOUSAND
                * DateUtilCommonConstants.NumeralConstant.THREE_THOUSAND_SIX_HUNDRED
                * DateUtilCommonConstants.NumeralConstant.TWENTY_FOUR * diffdate;
        temp.setTime(myTime);
        customDate = formatter.format(temp);
        return customDate;
    }

    public static String formateDate(java.util.Date date) {
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        if (date != null)
            return df.format(date);
        return null;
    }

    /**
     * 格式化日期格式返回字符串
     * 
     * @param date
     * @param dateFormat
     * @return
     */
    public static String formateDate(java.util.Date date, DateFormat dateFormat) {
        return dateFormat.format(date);
    }

    /**
     * 日期格式 yyyy-MM-dd HH:mm:ss
     * 
     * @param date
     * @return
     */
    public static String formateDateString(java.util.Date date) {
        if (null == date) {
            return "";
        }
        DateFormat YYYY_MM_DD_FORMAT = new SimpleDateFormat(
                DateUtilCommonConstants.DateConstant.DATEFORMATE_YYYY_MM_DD_HHMMSS);
        return formateDate(date, YYYY_MM_DD_FORMAT);

    }

    /**
     * 日期格式 yyyy-MM-dd
     * 
     * @param date
     * @return
     */
    public static String formateDateStr(java.util.Date date) {
        DateFormat YYYY_MM_DD = new SimpleDateFormat(DateUtilCommonConstants.DateConstant.DATEFORMATE_YYYY_MM_DD);
        return formateDate(date, YYYY_MM_DD);

    }

    /**
     * 返回前天，昨天，明天，后天等
     * 
     * @param diffdate 于今天相差的天数
     * @return
     */
    public static String getBeforeDay(int diffdate) {
        return getCustomExDate(getTime(), diffdate);
    }

    /**
     * 得到本月的第一天
     * 
     * @return
     */
    public static String getMonthFirstDay() {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
        return getFormatDate(calendar.getTime());
    }

    /**
     * 得到本月的最后一天
     * 
     * @return
     */
    public static String getMonthLastDay() {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        return getFormatDate(calendar.getTime());
    }

    public static int getDaysofMonth(Date date1) throws Exception {
        Calendar cld = Calendar.getInstance();
        cld.setTime(date1);
        cld.set(DateUtilCommonConstants.NumeralConstant.FIVE, DateUtilCommonConstants.NumeralConstant.ONE);
        cld.add(DateUtilCommonConstants.NumeralConstant.TWO, DateUtilCommonConstants.NumeralConstant.ONE);
        cld.add(DateUtilCommonConstants.NumeralConstant.SIX, -DateUtilCommonConstants.NumeralConstant.ONE);
        int days = cld.get(DateUtilCommonConstants.NumeralConstant.FIVE);
        return days;
    }

    public static int getWeeksofMonth(Date date1) throws Exception {
        Calendar cld = Calendar.getInstance();
        cld.setTime(date1);
        cld.set(DateUtilCommonConstants.NumeralConstant.FIVE, DateUtilCommonConstants.NumeralConstant.ONE);
        cld.add(DateUtilCommonConstants.NumeralConstant.TWO, DateUtilCommonConstants.NumeralConstant.ONE);
        cld.add(DateUtilCommonConstants.NumeralConstant.SIX, -DateUtilCommonConstants.NumeralConstant.ONE);
        int weeks = cld.get(DateUtilCommonConstants.NumeralConstant.FOUR);
        return weeks;
    }

    public static boolean isCurrentMonth(Date date1) throws Exception {
        Calendar cld = Calendar.getInstance();
        int currentYear = cld.get(1);
        int currentMonth = cld.get(2);
        cld.setTime(date1);
        int year = cld.get(1);
        int month = cld.get(2);
        boolean currentFlag = false;
        if (currentYear == year && currentMonth == month)
            currentFlag = true;
        return currentFlag;
    }

    public static int getFirstDayofWeek(Date date1) throws Exception {
        Calendar cld = Calendar.getInstance();
        cld.setTime(date1);
        cld.set(DateUtilCommonConstants.NumeralConstant.FIVE, DateUtilCommonConstants.NumeralConstant.ONE);
        int dayOfFirstSunday = cld.get(DateUtilCommonConstants.NumeralConstant.SEVEN)
                - DateUtilCommonConstants.NumeralConstant.ONE;
        return dayOfFirstSunday;
    }

    public static int getFirstWeekofMonth(Date date1) throws Exception {
        Calendar cld = Calendar.getInstance();
        cld.setTime(date1);
        cld.set(DateUtilCommonConstants.NumeralConstant.FIVE, DateUtilCommonConstants.NumeralConstant.ONE);
        int week = cld.get(DateUtilCommonConstants.NumeralConstant.THREE);
        return week;
    }

    public static Date getFirstDayofMonth(Date date1) throws Exception {
        Calendar cld = Calendar.getInstance();
        cld.setTime(date1);
        cld.set(DateUtilCommonConstants.NumeralConstant.FIVE, DateUtilCommonConstants.NumeralConstant.ONE);
        return cld.getTime();
    }

    public static Date getLastDayofMonth(Date date1) throws Exception {
        Calendar cld = Calendar.getInstance();
        cld.setTime(date1);
        cld.set(DateUtilCommonConstants.NumeralConstant.FIVE, DateUtilCommonConstants.NumeralConstant.ONE);
        return cld.getTime();
    }

    public static int getDayofMonth(Date date1) {
        Calendar cld = Calendar.getInstance();
        cld.setTime(date1);
        int day = cld.get(DateUtilCommonConstants.NumeralConstant.FIVE);
        return day;
    }

    public static int getMonth(Date date1) throws Exception {
        Calendar cld = Calendar.getInstance();
        cld.setTime(date1);
        int month = cld.get(DateUtilCommonConstants.NumeralConstant.TWO);
        return month;
    }

    public static int getYear(Date date1) {
        Calendar cld = Calendar.getInstance();
        cld.setTime(date1);
        int year = cld.get(DateUtilCommonConstants.NumeralConstant.ONE);
        return year;
    }

    public static int getDayofWeek(Date date1) throws Exception {
        Calendar cld = Calendar.getInstance();
        cld.setTime(date1);
        int dayOfSunday = cld.get(DateUtilCommonConstants.NumeralConstant.SEVEN);
        return dayOfSunday;
    }

    public static Date getMonday(Date date) {

        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        // 关于DAY_OF_WEEK的说明
        // Field number for get and set indicating
        // the day of the week. This field takes values
        // SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY,
        // and SATURDAY
        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        return cal.getTime();
    }

    public static int getCurrentDayofMonth() throws Exception {
        Calendar cld = Calendar.getInstance();
        int day = cld.get(DateUtilCommonConstants.NumeralConstant.FIVE);
        return day;
    }

    /**
     * 日期相加
     * 
     * @param date 日期
     * @param day 天数
     * @return 返回相加后的日期
     */
    public static java.util.Date addDate(java.util.Date date, int day) {
        java.util.Calendar c = java.util.Calendar.getInstance();
        c.setTimeInMillis(getMillis(date) + ((long) day) * DateUtilCommonConstants.NumeralConstant.TWENTY_FOUR
                * DateUtilCommonConstants.NumeralConstant.THREE_THOUSAND_SIX_HUNDRED
                * DateUtilCommonConstants.NumeralConstant.ONE_THOUSAND);
        return c.getTime();
    }

    /**
     * 日期相加
     * 
     * @param date 日期
     * @param day 天数
     * @return 返回相加后的日期
     */
    public static java.util.Date addDate(java.util.Date date, double day) {
        java.util.Calendar c = java.util.Calendar.getInstance();
        c.setTimeInMillis((long) (getMillis(date) + day * DateUtilCommonConstants.NumeralConstant.TWENTY_FOUR
                * DateUtilCommonConstants.NumeralConstant.THREE_THOUSAND_SIX_HUNDRED
                * DateUtilCommonConstants.NumeralConstant.ONE_THOUSAND));
        return c.getTime();
    }

    /**
     * 分钟相加
     * 
     * @param date
     * @param minite
     * @return
     */
    public static java.util.Date addMinute(java.util.Date date, double minute) {
        java.util.Calendar c = java.util.Calendar.getInstance();
        c.setTimeInMillis((long) (getMillis(date) + minute * DateUtilCommonConstants.NumeralConstant.SIXTY
                * DateUtilCommonConstants.NumeralConstant.ONE_THOUSAND));
        return c.getTime();
    }

    /**
     * 日期相减
     * 
     * @param date 日期
     * @param date1 日期
     * @return 返回相减后的日期
     */
    public static int diffDate(java.util.Date date, java.util.Date date1) {
        return (int) ((getMillis(date) - getMillis(date1)) / (DateUtilCommonConstants.NumeralConstant.TWENTY_FOUR
                * DateUtilCommonConstants.NumeralConstant.THREE_THOUSAND_SIX_HUNDRED
                * DateUtilCommonConstants.NumeralConstant.ONE_THOUSAND));
    }

    public static int diffDateToHour(Date date, Date date1) {
        return (int) ((getMillis(date) - getMillis(date1)) / (DateUtilCommonConstants.NumeralConstant.ONE_THOUSAND
                * DateUtilCommonConstants.NumeralConstant.SIXTY * DateUtilCommonConstants.NumeralConstant.SIXTY));
    }

    /**
     * 返回毫秒
     * 
     * @param date 日期
     * @return 返回毫秒
     */
    public static long getMillis(java.util.Date date) {
        java.util.Calendar c = java.util.Calendar.getInstance();
        c.setTime(date);
        return c.getTimeInMillis();
    }

    public static String formatDateTime(java.sql.Timestamp ts) {
        String temp = String.valueOf(ts);
        if (!StringUtils.isEmpty(temp)) {
            temp = temp.substring(DateUtilCommonConstants.NumeralConstant.ZERO,
                    DateUtilCommonConstants.NumeralConstant.SIXTEEN);
        } else {
            temp = "";
        }
        return temp;
    }

    /**
     * 获取当天日期 字符串形式返回
     * 
     * @return
     */
    public static String newDate() {
        // DateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        String date = null;
        date = format.format(new java.util.Date());
        return date;
    }

    /**
     * 获取当天日期 字符串形式返回
     * 
     * @return
     */
    public static String newDate(String dateFormat) {
        DateFormat format = new SimpleDateFormat(dateFormat);
        String date = format.format(new java.util.Date());
        return date;
    }

    /**
     * 判断是否同年同月
     * 
     * @param t1 日期1
     * @param t2 日期2
     * @return
     */
    public static boolean isSameMonth(Timestamp t1, Timestamp t2) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(t1);
        int year1 = cal.get(Calendar.YEAR);
        int month1 = cal.get(Calendar.MONTH);
        // System.out.println("year1:" + year1 + "month1:" + month1);
        cal.setTime(t2);
        int year2 = cal.get(Calendar.YEAR);
        int month2 = cal.get(Calendar.MONTH);
        // System.out.println("year2:" + year2 + "month2:" + month2);
        if (year1 == year2 && month1 == month2) {
            return true;
        }
        return false;
    }

    /**
     * 
     * 返回指定日期月份加减 〈功能详细描述〉
     *
     * @param date
     * @param day
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public static Date addMonth(Date date, int day) {

        Calendar cl = Calendar.getInstance();
        cl.setTime(date);
        // 大于28，默认跳转到下一个月，当前月份加day+1
        if (cl.get(Calendar.DATE) > 28) {
            cl.set(cl.get(Calendar.YEAR), cl.get(Calendar.MONTH), 1);
            cl.add(Calendar.MONTH, day + 1);
            date = cl.getTime();
        } else {
            cl.add(Calendar.MONTH, day);
            date = cl.getTime();
        }
        return date;
    }

    /**
     * 根据传入的数据获取星期
     * 
     * @param i
     * @return
     */
    public static String getWeek(int i) {
        String result = "";
        switch (i) {
            case DateUtilCommonConstants.NumeralConstant.ONE:
                result = "星期日";
                break;
            case DateUtilCommonConstants.NumeralConstant.TWO:
                result = "星期一";
                break;
            case DateUtilCommonConstants.NumeralConstant.THREE:
                result = "星期二";
                break;
            case DateUtilCommonConstants.NumeralConstant.FOUR:
                result = "星期三";
                break;
            case DateUtilCommonConstants.NumeralConstant.FIVE:
                result = "星期四";
                break;
            case DateUtilCommonConstants.NumeralConstant.SIX:
                result = "星期五";
                break;
            case DateUtilCommonConstants.NumeralConstant.SEVEN:
                result = "星期六";
                break;
            default:
                break;
        }
        return result;
    }

    public static String getMonth(int i) {
        String result = "";
        switch (i) {
            case DateUtilCommonConstants.NumeralConstant.ZERO:
                result = DateUtilCommonConstants.StringConstant.ONE;
                break;
            case DateUtilCommonConstants.NumeralConstant.ONE:
                result = DateUtilCommonConstants.StringConstant.TWO;
                break;
            case DateUtilCommonConstants.NumeralConstant.TWO:
                result = DateUtilCommonConstants.StringConstant.THREE;
                break;
            case DateUtilCommonConstants.NumeralConstant.THREE:
                result = DateUtilCommonConstants.StringConstant.FOUR;
                break;
            case DateUtilCommonConstants.NumeralConstant.FOUR:
                result = DateUtilCommonConstants.StringConstant.FIVE;
                break;
            case DateUtilCommonConstants.NumeralConstant.FIVE:
                result = DateUtilCommonConstants.StringConstant.SIX;
                break;
            case DateUtilCommonConstants.NumeralConstant.SIX:
                result = DateUtilCommonConstants.StringConstant.SEVEN;
                break;
            case DateUtilCommonConstants.NumeralConstant.SEVEN:
                result = DateUtilCommonConstants.StringConstant.EIGHT;
                break;
            case DateUtilCommonConstants.NumeralConstant.EIGHT:
                result = DateUtilCommonConstants.StringConstant.NINE;
                break;
            case DateUtilCommonConstants.NumeralConstant.NIEN:
                result = DateUtilCommonConstants.StringConstant.TEN;
                break;
            case DateUtilCommonConstants.NumeralConstant.TEN:
                result = DateUtilCommonConstants.StringConstant.ELEVEN;
                break;
            case DateUtilCommonConstants.NumeralConstant.ELEVEN:
                result = DateUtilCommonConstants.StringConstant.TWELVE;
                break;
            default:
                break;
        }
        return result;
    }

    /**
     * 获取指定格式“星期+月份+日”的字符串
     * 
     * @return
     */
    public static String getWeekString(java.util.Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        int week = cal.get(Calendar.DAY_OF_WEEK);
        int month = cal.get(Calendar.MONTH);
        int day = cal.get(Calendar.DAY_OF_MONTH);
        // System.out.println(getWeek(week) + " " + getMonth(month) + " " + day);
        return getWeek(week) + "  " + getMonth(month) + "." + day;
    }

    /*
     * public static void main(String[] args) { getNowWeek(); }
     */

    public static Timestamp dateToTimestamp(java.util.Date date) {
        if (date != null) {
            return new java.sql.Timestamp(date.getTime());
        }
        return null;
    }

    /**
     * 实现将日期转换成制定格式的Timestamp类型
     * 
     * @param date
     * @param format
     * @return
     */
    public static Timestamp dateChange(java.util.Date date, String format) {
        DateFormat df = new SimpleDateFormat(format);
        if (date != null) {
            try {
                return new java.sql.Timestamp(df.parse(df.format(date)).getTime());
            } catch (Exception e) {
                logger.debug("转换异常：" + e);
            }
        }
        return null;
    }

    /**
     * 实现日期和天数相加
     * 
     * @param date
     * @param days
     * @return 返回相加后的字符串型日期
     */
    public static java.util.Date daysAdd(String date, Double days) {
        DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        java.util.Date newDate = null;
        int day = (int) (double) days;
        Calendar cal = Calendar.getInstance();
        try {
            cal.setTime(format.parse(date));
            if (days >= DateUtilCommonConstants.NumeralConstant.ZERO) {
                cal.add(Calendar.DAY_OF_YEAR, day);
            } else {
                return null;
            }
            newDate = cal.getTime();
            // result = format.format(newDate);
        } catch (ParseException e) {
            logger.debug("转换异常：" + e); // To change body of catch statement use File |
            // Settings | File Templates.
        }
        return newDate;
    }

    /**
     * 实现日期和天数相加
     * 
     * @param date
     * @param days
     * @return 返回相加后的字符串型日期
     */
    public static Date daysAdd(Date date, int days) {
        java.util.Date newDate = null;
        Calendar cal = Calendar.getInstance();

        cal.setTime(date);
        if (days >= 0) {
            cal.add(Calendar.DAY_OF_YEAR, days);
        } else {
            return null;
        }
        newDate = cal.getTime();

        return newDate;
    }

    /**
     * 计算两个日期相减
     * 
     * @param s1
     * @param s2
     * @return 返回小时
     */
    public static double getHour(String s1, String s2) {
        double quot = DateUtilCommonConstants.NumeralConstant.ZERO;
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm");// 设定格式
        java.sql.Timestamp dateTime1 = null;
        java.sql.Timestamp dateTime2 = null;
        try {
            java.util.Date timeDate1 = dateFormat.parse(s1);
            java.util.Date timeDate2 = dateFormat.parse(s2);
            dateTime1 = new java.sql.Timestamp(timeDate1.getTime());
            dateTime2 = new java.sql.Timestamp(timeDate2.getTime());
            quot = dateTime2.getTime() - dateTime1.getTime();
            quot = quot / DateUtilCommonConstants.NumeralConstant.ONE_THOUSAND
                    / DateUtilCommonConstants.NumeralConstant.SIXTY / DateUtilCommonConstants.NumeralConstant.SIXTY;
        } catch (ParseException e) {
            logger.debug("转换异常：" + e); // To change body of catch statement use File |
            // Settings | File Templates.
        }
        return quot;
    }

    /**
     * 计算两个日期相减
     * 
     * @param date1
     * @param date2
     * @return 返回天数
     */
    public static int getDay(java.util.Date date1, java.util.Date date2) {
        Long quot = date2.getTime() - date1.getTime();
        quot = quot / (DateUtilCommonConstants.NumeralConstant.ONE_THOUSAND
                * DateUtilCommonConstants.NumeralConstant.SIXTY * DateUtilCommonConstants.NumeralConstant.SIXTY
                * DateUtilCommonConstants.NumeralConstant.TWENTY_FOUR) + 1;
        return quot.intValue();
    }

    /**
     * 将字符串转化为java.sql.Timestamp类型
     * 
     * @param str
     * @return
     */
    public static java.sql.Timestamp stringToDate(String str) {
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        java.sql.Timestamp newDate = null;
        if (str != null && str.length() == DateUtilCommonConstants.NumeralConstant.TEN) {
            try {
                newDate = new java.sql.Timestamp(df.parse(str).getTime());
            } catch (ParseException e) {
                logger.debug("转换异常：" + e); // To change body of catch statement use
                // File | Settings | File Templates.
            }
        }
        return newDate;
    }

    /**
     * 对于日期是否是星期六，星期天的判断，并进行处理，决定是否顺延到下一天
     * 
     * @param date
     * @param delieverySaturday
     * @param delieverySunday
     * @return
     */
    /*
     * public static String filterWeekend(java.util.Date date, String delieverySaturday, String delieverySunday) {
     * DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); Calendar cal = Calendar.getInstance(); cal.setTime(date); int
     * i = cal.get(Calendar.DAY_OF_WEEK); if (i == 7) { if ("0".equals(delieverySaturday)) { date =
     * daysAdd(df.format(date), 1.0); if ("0".equals(delieverySunday)) date = daysAdd(df.format(date), 1.0); } } else if
     * (i == 1) { if ("0".equals(delieverySunday)) date = daysAdd(df.format(date), 1.0); } return df.format(date); }
     */
    /**
     * 计算两个日期相减
     * 
     * @param time1
     * @param time2
     * @return 返回天数
     */
    public static double getQuot(Timestamp time1, Timestamp time2) {
        if (time1 != null && time2 != null) {
            double quot = (double) DateUtilCommonConstants.NumeralConstant.ZERO;
            // SimpleDateFormat ft = new SimpleDateFormat("yyyy/MM/dd");
            quot = time1.getTime() - time2.getTime();
            quot = quot / DateUtilCommonConstants.NumeralConstant.ONE_THOUSAND
                    / DateUtilCommonConstants.NumeralConstant.SIXTY / DateUtilCommonConstants.NumeralConstant.SIXTY
                    / DateUtilCommonConstants.NumeralConstant.TWENTY_FOUR;
            return quot;
        } else {
            return (double) DateUtilCommonConstants.NumeralConstant.ZERO;
        }
    }

    // 判断时间s1是否在时间s2之前
    public static boolean compDate(String s1, String s2) {
        int day = DateUtilCommonConstants.NumeralConstant.ZERO;
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
        java.util.Date time1;
        java.util.Date time2;
        try {
            time1 = sf.parse(s1);
            time2 = sf.parse(s2);

            day = (int) ((time2.getTime() - time1.getTime()) / 3600 / 24 / 1000);
        } catch (ParseException e) {
            logger.debug("转换异常：" + e);
        }
        if (day > DateUtilCommonConstants.NumeralConstant.ZERO) {
            return true;
        } else {
            return false;
        }
    }

    // 判断时间s1是否在时间s2之前或者与s2相同
    public static boolean compDateAnother(String s1, String s2) {
        int day = DateUtilCommonConstants.NumeralConstant.ZERO;
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
        java.util.Date time1;
        java.util.Date time2;
        try {
            time1 = sf.parse(s1);
            time2 = sf.parse(s2);

            day = (int) ((time2.getTime() - time1.getTime()) / 3600 / 24 / 1000);
        } catch (ParseException e) {
            logger.debug("转换异常：" + e);
        }
        if (day >= DateUtilCommonConstants.NumeralConstant.ZERO) {
            return true;
        } else {
            return false;
        }
    }

    // 判断时间s1是否在时间s2之前
    public static String compareTo(String s1, String s2) {
        int day = DateUtilCommonConstants.NumeralConstant.ZERO;
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
        java.util.Date time1;
        java.util.Date time2;
        try {
            time1 = sf.parse(s1);
            time2 = sf.parse(s2);
            day = (int) ((time2.getTime() - time1.getTime())
                    / DateUtilCommonConstants.NumeralConstant.THREE_THOUSAND_SIX_HUNDRED
                    / DateUtilCommonConstants.NumeralConstant.TWENTY_FOUR
                    / DateUtilCommonConstants.NumeralConstant.ONE_THOUSAND);
        } catch (ParseException e) {
            logger.debug("转换异常：" + e);
        }
        if (day > DateUtilCommonConstants.NumeralConstant.ZERO) {
            return s2;
        } else {
            return s1;
        }
    }

    /**
     * method 将字符串类型的日期转换为一个timestamp（时间戳记java.sql.Timestamp）
     * 
     * @param dateString 需要转换为timestamp的字符串
     * @return dataTime timestamp
     */
    public static java.sql.Timestamp stringToTime(String dateString) {
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm");// 设定格式
        java.sql.Timestamp dateTime = null;
        try {
            if (dateString != null && dateString.length() > 0) {
                java.util.Date timeDate = dateFormat.parse(dateString);// util类型
                dateTime = new java.sql.Timestamp(timeDate.getTime());// Timestamp类型,timeDate.getTime()返回一个long型
            }
        } catch (ParseException e) {
            logger.debug("转换异常：" + e); // To change body of catch statement use File |
            // Settings | File Templates.
        }
        return dateTime;
    }

    /**
     * 把日期格式化成中文格式
     */
    public static String parseCnDate(Date date) {
        DateFormat CN_TIME_FORMAT = new SimpleDateFormat(DateUtilCommonConstants.DateConstant.DATEFORMATE_CN_TIME);
        return CN_TIME_FORMAT.format(date);
    }

    public static Time getTime(Timestamp now) {
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
        return Time.valueOf(sdf.format(now));
    }

    /**
     * 把整型转换成时间（如 12345 转换成 01:23:45）
     * 
     * @param intValue
     * @return
     */
    public static String parseIntValueToTime(Integer intValue) {
        String str = "00:00:00";
        if (intValue != null) {

            String _str = String.valueOf(intValue);
            switch (_str.length()) {
                case 1:
                    _str = "00000" + _str;
                    break;
                case 2:
                    _str = "0000" + _str;
                    break;
                case DateUtilCommonConstants.NumeralConstant.THREE:
                    _str = "000" + _str;
                    break;
                case DateUtilCommonConstants.NumeralConstant.FOUR:
                    _str = "00" + _str;
                    break;
                case DateUtilCommonConstants.NumeralConstant.FIVE:
                    _str = "0" + _str;
                    break;
                case DateUtilCommonConstants.NumeralConstant.SIX:
                    break;
                default:
                    _str = "000000";
                    break;
            }
            str = _str.substring(0, 2) + ":" + _str.substring(2, DateUtilCommonConstants.NumeralConstant.FOUR) + ":"
                    + _str.substring(DateUtilCommonConstants.NumeralConstant.FOUR);
        }
        return str;
    }

    /**
     * 返回指定天数的毫秒
     * 
     * @param day int类型的天数
     */
    public static long getMilliSeconds(int day) {
        return (long) day * DateUtilCommonConstants.NumeralConstant.TWENTY_FOUR
                * DateUtilCommonConstants.NumeralConstant.THREE_THOUSAND_SIX_HUNDRED
                * DateUtilCommonConstants.NumeralConstant.ONE_THOUSAND;
    }

    /**
     * 获取日期的小时
     * 
     * @param date 日期
     * @return 小时(24小时制)
     */
    public static int getHourOfDay(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        return cal.get(Calendar.HOUR_OF_DAY);
    }

    /**
     * 设置当前日期的为指定小时的日期 2011-11-24 14:23:00 ---18---2011-11-24 18:23:00
     * 
     * @param date 日期
     * @param hour 小时(24小时)
     * @return
     */
    public static Date setHourOfDate(Date date, int hour) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.set(Calendar.HOUR_OF_DAY, hour);
        return cal.getTime();
    }

    /**
     * 返回当前时间的自定义格式String
     * 
     * @param dateFormat
     * @return 自定义格式的日期
     * 
     *         自定义支持的格式有： yyyy-MM-dd HH:mm:ss yyyy年MM月dd日 HH时mm分ss秒 yyyy年MM月dd日 HH时mm分 yyyy-MM-dd HH:mm yyyyMMddHH:mm:ss
     *         yyyy-MM-dd yyyyMMdd HHmmss yyyy年MM月dd日 HH:mm:ss" HH时mm分ss秒 ......(很多)
     */
    public static String getDefinableTime(String dateFormat) {
        if (null == dateFormat || "".equals(dateFormat.trim())) {
            return "";
        }
        Date currentTime = new Date();
        SimpleDateFormat formatter = new SimpleDateFormat(dateFormat);
        String dateString = formatter.format(currentTime);
        return dateString;
    }

    /**
     * 返回指定时间的自定义格式String
     * 
     * @param dateFormat
     * @return 自定义格式的日期
     * 
     *         自定义支持的格式有： yyyy-MM-dd HH:mm:ss yyyy年MM月dd日 HH时mm分ss秒 yyyy年MM月dd日 HH时mm分 yyyy-MM-dd HH:mm yyyyMMddHH:mm:ss
     *         yyyy-MM-dd yyyyMMdd HHmmss yyyy年MM月dd日 HH:mm:ss" HH时mm分ss秒 ......(很多)
     */
    public static String getDefinableTime(Date date, String dateFormat) {
        if (null == date || null == dateFormat || "".equals(dateFormat.trim())) {
            return "";
        }
        SimpleDateFormat formatter = new SimpleDateFormat(dateFormat);
        String dateString = formatter.format(date);
        return dateString;
    }

    /**
     * 获取YYYY/MM/DD字符串
     * 
     * @param date 待格式化日期
     * @return YYYY/MM/DD字符串
     */
    public static String getYYMMDDWidthSlash(Date date) {
        DateFormat YYYYMMDD_SLASH_FORMAT = new SimpleDateFormat(
                DateUtilCommonConstants.DateConstant.DATEFORMATE_YYYYMMDD_SLASH);
        return YYYYMMDD_SLASH_FORMAT.format(date);
    }

    /**
     * 根据传入的日期格式(yyyy-MM-dd HH:mm:ss)返回yyyyMMddHHmmss格式日期
     * 
     * @param date
     * @return yyyyMMddHHmmss日期
     */
    public static String getDefinableDateStr(String date) {
        if (date == null) {
            return "";
        }
        return getDefinableTime(getDateOfTimeStr(date), "yyyyMMddHHmmss");
    }

    /**
     * 后n个工作日
     * 
     * @param date //传入时间
     * @param nextWorkDay //后退工作日时间
     * @param chinaHoliday // 传统节假日（例如春节）
     * @param normalDay // 调休日期
     * 
     * @return
     */
    public static String nextWorkDay(String date, int nextWorkDay, List<?> chinaHoliday, List<?> normalDay) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat holidaysdf = new SimpleDateFormat("MM-dd");

        Calendar cal = Calendar.getInstance();
        int count = DateUtilCommonConstants.NumeralConstant.ZERO;
        try {
            Date startDate = sdf.parse(date);
            cal.setTime(startDate);
            while (count < nextWorkDay) {
                cal.add(Calendar.DATE, 1);
                date = sdf.format(cal.getTime());
                if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY
                        || cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
                    if (normalDay.contains(date)) {
                        count++;
                        continue;
                    }
                } else {
                    if (!holidayList(holidaysdf.format(cal.getTime())) && !chinaHoliday.contains(date)) {
                        count++;
                    }
                }
            }
        } catch (ParseException e) {
            logger.debug("转换异常：" + e);
        }
        return date;
    }

    /**
     * 前n个工作日
     * 
     * @param date //传入时间
     * @param nextWorkDay //前进工作日时间
     * @param chinaHoliday // 传统节假日（例如春节）
     * @param normalDay // 调休日期
     * 
     * @return
     */
    public static String preWorkDay(String date, int preWorkDay, List<?> chinaHoliday, List<?> normalDay) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat holidaysdf = new SimpleDateFormat("MM-dd");

        Calendar cal = Calendar.getInstance();
        int count = preWorkDay;
        try {
            Date startDate = sdf.parse(date);
            cal.setTime(startDate);
            while (count > DateUtilCommonConstants.NumeralConstant.ZERO) {
                cal.add(Calendar.DATE, -1);
                date = sdf.format(cal.getTime());
                if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY
                        || cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
                    if (normalDay.contains(date)) {
                        count--;
                        continue;
                    }
                } else {
                    if (!holidayList(holidaysdf.format(cal.getTime())) && !chinaHoliday.contains(date)) {
                        count--;
                    }
                }
            }
        } catch (ParseException e) {
            logger.debug("转换异常：" + e);
        }
        return date;
    }

    /**
     * 
     * 功能描述: <br>
     * 法定假日，元旦，五一和国庆
     *
     * @param findDate
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public static boolean holidayList(String findDate) {
        List<String> ls = new ArrayList<String>();
        ls.add("01-01");
        ls.add("05-01");
        ls.add("10-01");
        ls.add("10-02");
        ls.add("10-03");
        if (ls.contains(findDate)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 
     * 功能描述: <br>
     * 生成一个 18 位的 yyyyMMddHHmmss.SSS 格式的日期字符串
     *
     * @param date
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public static String genTimeStampString(Date date) {
        SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        return df.format(date);
    }

    /**
     * 
     * 功能描述: <br>
     * date 转 YYYYMMDD 字符串
     *
     * @param date
     * @return
     * @see
     * @since 2.0
     */
    public static String date2YYYYMMDDStr(Date date) {
        DateFormat YYYYMMDD_FORMAT = new SimpleDateFormat(DateUtilCommonConstants.DateConstant.DATEFORMATE_YYYYMMDD);
        return YYYYMMDD_FORMAT.format(date);
    }

    /**
     * 
     * 功能描述: <br>
     * 根据指定日期，获取年，月，日；并以数组形式返回
     *
     * @param date
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public static String[] getWeekStringArray(Date date) {
        String[] ymd = new String[DateUtilCommonConstants.NumeralConstant.THREE];
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        ymd[0] = String.valueOf(cal.get(Calendar.YEAR));
        ymd[1] = String.valueOf(cal.get(Calendar.MONTH) + 1);
        ymd[2] = String.valueOf(cal.get(Calendar.DATE));
        return ymd;
    }

    /**
     * 
     * 功能描述: <br>
     * DB2日期格式截取为 YYYY-MM-DD HH:mm:ss 形式
     * 
     * @param date
     * @return
     * @see
     * @since 3.1
     */
    public static String formatDBDateStr2Str(String date) {
        String retStr = "";
        if (!StringUtils.isEmpty(date)) {
            retStr = date.substring(DateUtilCommonConstants.NumeralConstant.ZERO, date.lastIndexOf("."));
        }
        return retStr;
    }

    /**
     * 获取指定时间的零点时间
     *
     * @param date
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public static Date getZeroTime(Date date) {

        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.set(Calendar.HOUR_OF_DAY, 0);
        c.set(Calendar.MINUTE, 0);
        c.set(Calendar.SECOND, 0);
        c.set(Calendar.MILLISECOND, 0);

        return c.getTime();
    }

    public static Date getNextDay(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_MONTH, -1);
        date = calendar.getTime();
        return date;
    }

    // public static void main(String[] args){
    // System.out.println(getWeekStringArray(getCurDate())[0]);
    // }
}
